[小ネタ]AWS SDK for Java v2を使ってAssume Roleする
概要
表題の通りです。
やりかた
認証情報を操作してAWSの各サービスにアクセスする場合、クライアントの CredentialsProvider
を変更する必要があります。
STSライブラリにはAssume Role後の認証情報を提供する StsAssumeRoleCredentialsProvider
があり、これをクライアントが利用することで対象RoleとしてAWSサービスへのアクセスを行えるようになります。
以下のコードは、実際に StsAssumeRoleCredentialsProvider
を使って指定されたRoleで StsClient#getCallerIdentity
を呼び出し、自身の Role ARN を表示しています。
package sample; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.awssdk.services.sts.auth.StsAssumeRoleCredentialsProvider; import software.amazon.awssdk.services.sts.model.AssumeRoleRequest; public class Sample { public static void main(String... args){ String ROLE_ARN = "arn:aws:iam::012345678901:role/test_role"; String SESSION_NAME = "assumeRoleTest"; AssumeRoleRequest req = AssumeRoleRequest.builder() .roleArn(ROLE_ARN).roleSessionName(SESSION_NAME).build(); AwsCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder() .stsClient(StsClient.builder().build()) .refreshRequest(req).build(); StsClient client = StsClient.builder() .credentialsProvider(provider).build(); System.out.println(client.getCallerIdentity().arn()); } }
StsAssumeRoleCredentialsProvider.Builder#refreshRequest
にConsumerを指定することで、 AssumeRoleRequest
の生成を簡略化することもできます(参考)。
Similar to refreshRequest(AssumeRoleRequest), but takes a lambda to configure a new AssumeRoleRequest.Builder. This removes the need to called AssumeRoleRequest.builder() and AssumeRoleRequest.Builder#build().
... public static void main(String... args){ String ROLE_ARN = "arn:aws:iam::012345678901:role/test_role"; String SESSION_NAME = "assumeRoleTest"; AwsCredentialsProvider provider = StsAssumeRoleCredentialsProvider.builder() .stsClient(StsClient.builder().build()) .refreshRequest(b -> b.roleArn(ROLE_ARN).roleSessionName(SESSION_NAME)).build(); StsClient client = StsClient.builder() .region(Region.AWS_GLOBAL) .credentialsProvider(provider).build(); System.out.println(client.getCallerIdentity().arn()); } ...